Pristup k promenne z jineho formu
Otázka od: Petr K.
5. 12. 2002 19:07
Zdravim,
Chci se jen zeptat jestli s tim nekdo mate nejakou zkusenost
Mam deklarovanou promenno ve Form2 a chci zjistit její hodnotu z formu1 nebo
z formu1 ji naplnit nejakou hodnotou.
Dik Petr
---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.426 / Virová báze: 239 - datum vydání: 2.12.2002
Odpovedá: Petr Brant
5. 12. 2002 20:19
Pokud mas tu promennou deklarovanou jako public promennou objektu, tak bez
problemu, pokud ji mas jako promennou v tom unitu, tak take. Napriklad
ve form2.pas:
-----------------
type TForm2 = class(TForm)
...
public
prom: integer;
...
end;
var Form2: TForm2
-----------------
ve form1.pas:
-----------------
uses form2;
...
Form2.prom:= 1 apod.
-----------------
anebo
ve form2.pas:
-----------------
type TForm2 = class(TForm)
...
public
...
end;
var Form2: TForm2
prom: integer;
-----------------
ve form1.pas:
-----------------
uses form2;
...
prom:= 1 apod.
-----------------
Ten druhy zpusob je mene programatorsky, protoze globalni promenne jsou jiz
od prirody nebezpecne.
RNDr. Petr Brant [brant@dcomm.cz]
http://web.redbox.cz/petr.brant
D&COMM s.r.o.
Korunovační 6
Praha 7
tel. +420724007234
Subject: Pristup k promenne z jineho formu
Chci se jen zeptat jestli s tim nekdo mate nejakou zkusenost
Mam deklarovanou promenno ve Form2 a chci zjistit její hodnotu z
formu1 nebo
z formu1 ji naplnit nejakou hodnotou.
Odpovedá: Zbysek Hlinka
5. 12. 2002 22:14
On 5 Dec 2002 at 19:17, Petr Brant wrote:
> Pokud mas tu promennou deklarovanou jako public promennou objektu, tak
> bez problemu, pokud ji mas jako promennou v tom unitu, tak take.
> Napriklad
>
> ve form2.pas:
> -----------------
> type TForm2 = class(TForm)
> ...
> public
> prom: integer;
> ...
> end;
Obecne je lepsi deklarovat pristup k promenne pres property, zejmena
pokud by tato promena byla svazana s nejakou mnozinou hodnot, nebo
pokud ovlivnuje neco ve Form2.
S pozdravem
Zbysek Hlinka
E-mail: hlinka@hlinka.cz, localizator@localizator.com
Phone: +420 603 551 282
Odpovedá: Jiri Novotny
6. 12. 2002 9:28
> Chci se jen zeptat jestli s tim nekdo mate nejakou zkusenost
> Mam deklarovanou promenno ve Form2 a chci zjistit její hodnotu z formu1 nebo
> z formu1 ji naplnit nejakou hodnotou.
Ahoj,
tvuj dotaz je formulovan ponekud "ledabyle" IMHO . Form1 a Form2
jsou nazvy formularu nebo unit? A ta promenna je soucasti formulare
nebo ji ma definovanou v Interface?
Ukazka, jak by to slo v ruznych pripadech delat:
unit Volajici;
interface
uses
Windows, Messages, ...
type
TVolajiciForm = class(TForm)
....
private
I : Integer;
public
...
end;
var
VolajiciForm: TVolajiciForm;
implementation
{$R *.DFM}
uses
Volany;
--------------------------------------------------------
unit Volany;
interface
uses
Windows, Messages, ...
type
TVolanyForm = class(TForm)
....
private
...
public
Prom1 : Integer;
end;
var
VolanyForm: TVolanyForm;
Prom2 : Integer;
implementation
{$R *.DFM}
------------------------------------------------------
Pak ve Volajici muzes kdykoliv priradit do Prom2 cokoliv
(pochopitelne prislusneho datoveho typu) a kdykoliv cist.
Do Prom1 se prirazuje takto:
Volany.Prom1 := 10
a cte se
I := Volany.Prom1.
Ale pozor, ten formular VolanyForm musi byt v tomto okamziku
uz vytvoreny!
Jirka.
Odpovedá: Jan Sebelík
6. 12. 2002 10:50
> Odesílatel: Petr Brant <brant@dcomm.cz>
> Pokud mas tu promennou deklarovanou jako public promennou objektu, tak bez
> problemu, pokud ji mas jako promennou v tom unitu, tak take. Napriklad
Petr ma stoprocentne ve vsem pravdu.
Ale:
1.
Pokud tato promenna nejak patri k danemu formulari, urcite by to nemela byt
globalni promenna. Co kdybych si vzpomnel vytvorit nekolik instanci Form2? Ci
bude ta promenna.
Ona uz samotna globalni promenna Form2 je na povazenou.
Kazda globalni promenna predstavuje potencialni prusvih.
2.
Pokud v nejake metode TForm1 napisu
Form2.Nastaveni:=cosi,
dozvi se o tom Form2? Nemel by na to nejak reagovat?
Proto by to mela byt spise property tridy nez polozka tridy.
Form2 na zmenu nastaveni zareaguje v metode SetNastaveni.
3.
Pozor na cyklicka "uses" ke kterym to nekdy svadi. Rikam nekdy.
Zneprehlednuji architekturu projektu, za chvili uz nikdo nevi, kdo komu
"slouzi".
Pokud ma napriklad Form2 soucasne nejak ovlivnovat deni na Form1, lepsi nez
sahat z Form2 na Form1,
je podstrcit do
Form2.OnNecoJsemUdelal metodu tridy TForm1.
Form2 pak ve vhodnem okamziku vola
if Assigned(OnNecoJsemUdelal) then
OnNecoJsemUdelal(self) // ja
Form1 si to pak sam osetri v
TForm1.NejakejEventHandler
TForm1:
Form2:=TForm2.Create(self)
Form2.OnNecoJsemUdelal:=NejakejEventHandler.
viz kurz Delphi: Pokrocile techniky
Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================